import { ElMessage, ElMessageBox, ElNotification, ElLoading, MessageBoxData, MessageBoxInputData } from 'element-plus';

let loadingInstance: any;

/**
 * 提供各种消息提示和确认框的方法
 */
export default {
    /**
     * 消息提示
     * @param content - 提示内容
     */
    msg(content: string): void {
        ElMessage.info(content);
    },

    /**
     * 错误消息
     * @param content - 错误内容
     */
    msgError(content: string): void {
        ElMessage.error(content);
    },

    /**
     * 成功消息
     * @param content - 成功内容
     */
    msgSuccess(content: string): void {
        ElMessage.success(content);
    },

    /**
     * 警告消息
     * @param content - 警告内容
     */
    msgWarning(content: string): void {
        ElMessage.warning(content);
    },

    /**
     * 弹出提示
     * @param content - 提示内容
     * @returns 返回一个 Promise，resolve 为用户点击确定
     */
    alert(content: string): Promise<MessageBoxData> {
        return ElMessageBox.alert(content, "系统提示");
    },

    /**
     * 错误提示
     * @param content - 错误内容
     * @returns 返回一个 Promise，resolve 为用户点击确定
     */
    alertError(content: string): Promise<MessageBoxData> {
        return ElMessageBox.alert(content, "系统提示", { type: 'error' });
    },

    /**
     * 成功提示
     * @param content - 成功内容
     * @returns 返回一个 Promise，resolve 为用户点击确定
     */
    alertSuccess(content: string): Promise<MessageBoxData> {
        return ElMessageBox.alert(content, "系统提示", { type: 'success' });
    },

    /**
     * 警告提示
     * @param content - 警告内容
     * @returns 返回一个 Promise，resolve 为用户点击确定
     */
    alertWarning(content: string): Promise<MessageBoxData> {
        return ElMessageBox.alert(content, "系统提示", { type: 'warning' });
    },

    /**
     * 通知提示
     * @param content - 通知内容
     */
    notify(content: string): void {
        ElNotification.info(content);
    },

    /**
     * 错误通知
     * @param content - 错误内容
     */
    notifyError(content: string): void {
        ElNotification.error(content);
    },

    /**
     * 成功通知
     * @param content - 成功内容
     */
    notifySuccess(content: string): void {
        ElNotification.success(content);
    },

    /**
     * 警告通知
     * @param content - 警告内容
     */
    notifyWarning(content: string): void {
        ElNotification.warning(content);
    },

    /**
     * 确认窗体
     * @param content - 确认内容
     * @returns 返回一个 Promise，resolve 为用户点击确定，reject 为用户点击取消
     */
    confirm(content: string): Promise<MessageBoxData> {
        return ElMessageBox.confirm(content, "系统提示", {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: "warning",
        });
    },

    /**
     * 提交内容
     * @param content - 提示内容
     * @returns 返回一个 Promise，resolve 为用户输入的内容，reject 为用户点击取消
     */
    prompt(content: string): Promise<MessageBoxInputData | null> {
        return ElMessageBox.prompt(content, "系统提示", {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: "warning",
        });
    },

    /**
     * 打开遮罩层
     * @param content - 遮罩层显示的文本
     */
    loading(content: string): void {
        loadingInstance = ElLoading.service({
            lock: true,
            text: content,
            background: "rgba(0, 0, 0, 0.7)",
        });
    },

    /**
     * 关闭遮罩层
     */
    closeLoading(): void {
        if (loadingInstance) {
            loadingInstance.close();
        }
    },
};